<?php

/**
 * registrar_usuario actions.
 *
 * @package    Aceptor
 * @subpackage registrar_usuario
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class registrar_usuarioActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
public function executeIndex(sfWebRequest $request)
{

    //$service = new serviceAceptor();
    //date_default_timezone_set($service->getTimezone());

    $email = $this->getUser()->getFlash('singInEmail');
    $name  = $this->getUser()->getFlash('singName');
    $view  = $this->getUser()->getFlash('view');
    if($view=="confirmation")
    {
        $this->email = $email;
        return sfView::SUCCESS;

    }
    elseif($view=="notconfirmation")
    {       
        return "Notconfirmation";
    }
    else
    {
        return sfView::ERROR;
       
    }

}

  /*
   * Este Accion es llamado en home/index
   * el cual registra al usuario al cual se le asignaran 3 categorias basicas
   * amigos / familia / trabajo par que puedean ser usadas como etiquetas(agrupar acuerdos)
   */
  public function executeRegistrar_usuario(sfWebRequest $request)
  {

      //$service = new serviceAceptor();
      //date_default_timezone_set($service->getTimezone());
      //Recupera Parametros del registro
      $txt_nombre      = $request->getParameter('txt_nombre');
      $txt_ape_paterno = $request->getParameter('txt_ape_paterno');
      $txt_correo      = $request->getParameter('txt_correo');
      $txt_password    = $request->getParameter('txt_password');
      $txt_confirma    = $request->getParameter('txt_confirma');
      $token_security  = $request->getParameter('hd-token-signin');

    //Validadores
      $val_string = new sfValidatorString(array('required' => true));
      $val_caracteres =new sfValidatorRegex(array('pattern' => '/^\w+$/'));
      $val_integer = new sfValidatorInteger(array('min' => 1000000, 'max' => 2147483647));
      $val_correo = new sfValidatorEmail();
      $exito = 0;
    //Validar datos
      try {
          $val_string->clean($txt_nombre);
          $exito++;
      } catch (sfValidatorError $e) {}
      try {
          $val_string->clean($txt_ape_paterno);
          $exito++;
      } catch (sfValidatorError $e) {}
      try {
          $val_correo->clean($txt_correo);
          $exito++;
      } catch (sfValidatorError $e){}
      try {
          $val_string->clean($txt_password);
          $exito++;
      } catch (sfValidatorError $e) {}

      if($txt_password == $txt_confirma){
          $exito++;
      }
      


      
  /*
   llamar al primer servicio para verificar si existe el usuario
   en practil y despues de eso indicar que metodo voy a utilizar y
   el de registrar o el actualizar el campo
   */

    $servicioAceptor = new serviceAceptor();
    //aca valido si los requerimientos basicos son aprobados.
    if($exito==5)
    {

            /*
             * 1 = necesita verificacion
             * 2 = NO necesita verificacion
            */
            $necesita_verificacion =  ($token_security!="null")?  2 :  1;


      try{
       
            $conection = Propel::getConnection();
            $conection->beginTransaction();
            /*
             * Primero registro localmente al usuario en BD de aceptor
             */
            $success_local = $servicioAceptor->usersRegister($txt_nombre,$txt_ape_paterno,$txt_ape_paterno,$txt_correo,$txt_password);
            if($success_local['success'])
            //si es se graba correctamente
            {
                    //obtengo al objeto grabado
                    $userBean = $success_local['object'];
                    // aca genero la url para grabarlo en la BD de practil
                    $url = $servicioAceptor->returnUrlRegisterUser($userBean->getNombre(), $userBean->getApePaterno(), md5($userBean->getPassword()), $txt_correo, sfConfig::get('app_aplication_id'),$necesita_verificacion);
                    // genero el registro y espero una respuesta
                    $respuesta_registrar = file_get_contents($url);
                    // la respuesta esta en formato json asi que lo decofico
                    $decode = json_decode($respuesta_registrar);
                    $codigo_respuesta = $decode->{'success'};
                    $token_account    = $decode->{'stoken'};
                    $pk_account       = $decode->{'accountpk'};
                    

                    if($codigo_respuesta)
                    // si la respuesta es true
                    {

                           //ahora tego que registrarle el paquete aceptor( aca se registrar con el paquete basico)
                           $url                = $servicioAceptor->returnUrlRegisterPacket(sfConfig::get('app_aplication_id'),$pk_account, "aceptor-basico");
                          
                           $respuesta_servicio = file_get_contents($url);
                           $decode             = json_decode($respuesta_servicio);
                           if($decode->{'success'})
                            // si la respuesta es true
                           {
                                
                                 // actualizo en campo del la tabla de UsuarioAceptor(IDPRACTIL => esto me sirve para reconocer como estan relacionados la BDPractil y BDAceptor)
                                 $success_local = $servicioAceptor->userAsociatePractilId($userBean,$pk_account);
                                 if($success_local)
                                 {
                                      /*
                                       * ahora que ya esta grabado en la BD de practil y de aceptor
                                       * -Verifico si necesita enviale un correo de verificacion para validar que su correo sea correcto
                                       * -si la se envio exitosamente
                                       */
                                     
                                      if($necesita_verificacion==1){

                                             $success_email = $this->send_mail_aceptor($token_account,$userBean->getCorreo());

                                             if($success_email)
                                              {
                                                 $this->getUser()->setFlash('view','confirmation');
                                                 $this->getUser()->setFlash('singInEmail', $userBean->getCorreo());
                                                 $this->getUser()->setFlash('singName', $userBean->getApePaterno());
                                                 $conection->commit();
                                                 return $this->redirect('@sign_in_user');
                                              }
                                              else
                                              {
                                                $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'No se pudo enviar el email de confirmacion!');
                                                $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);
                                                $conection->rollBack();
                                                $this->redirect('@homepage');
                                              }
                                      }
                                      else
                                      {
                                                 $this->getUser()->setFlash('view','notconfirmation');
                                                 $this->getUser()->setFlash('singInEmail', $userBean->getCorreo());
                                                 $this->getUser()->setFlash('singName', $userBean->getApePaterno());
                                                 $conection->commit();
                                                 return $this->redirect('@sign_in_user');
                                      }

                                  }
                                  else
                                  {
                                        $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'Ups, No se asocio cuenta correctamente!');
                                        $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);
                                        $conection->rollBack();
                                        $this->redirect('@homepage');
                                  }
                               
                           }
                           else{
                                  $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'error al asociar el paquete al usuario.');
                                  $this->getUser()->setAttribute('message_sign_in',$respt);
                                  $conection->rollBack();
                                  $this->redirect('@homepage');
                           }
                    }
                    else
                    {         
                             if($decode->{'code'} == "p-10003" )
                             {    
                                  $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'El Correo ingresado ya se encuentra registrado.');
                                  $this->getUser()->setAttribute('message_sign_in',$respt);
                                  $conection->rollBack();                                   
                                  $this->redirect('@homepage');
                             }
                             elseif($decode->{'code'} =="p-20009")
                             {
                                  $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'El Correo ya se encuentra asociado a una cuenta!');
                                  $this->getUser()->setAttribute('message_sign_in',$respt);
                                  $conection->rollBack();
                                  $this->redirect('@homepage');
                             }
                             else
                             {
                                 $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'Ups, error url');
                                 $this->getUser()->setAttribute('message_sign_in',$respt);
                                 $conection->rollBack();
                                 $this->redirect('@homepage');
                             }
                     }

            }
            else
            {
                $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'El Correo ya se encuentra asociado a una cuenta');
                $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);
                $conection->rollBack();
                $this->redirect('@homepage');
            }

           
      }catch(Exception $e){
                $conection->rollBack();
                $this->redirect('@homepage');
       }

     }
     else
     {
          $respt =  array('firtname'=>$txt_nombre,'lastname'=>$txt_ape_paterno,'email'=>$txt_correo,'password'=>$txt_password,'message' =>'Error en los campos del formulario.');
          $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);        
          $this->redirect('@homepage');
     }

//      $servicio_practil = sfConfig::get('app_url_practil').'/xml_servicio_usuario/verificar_disponibilidad?';
//      $token= "esferadigital";
//      $token = md5($token);
//      $servicio_practil = $servicio_practil.'email='.$txt_correo."&plataforma_key=1&token=".$token;
//
//
//      $lib = new myLib();
//      $respuesta = file_get_contents($servicio_practil);
//      $result = $lib->xml2array($respuesta);
//
//      $items=$result['practil'];
//      foreach ($items as $item){
//           if(isset($item['code'])){
//               if($item['code']!=20001){
//                      if($item['code']==10001){
//                        //Usuario disponible-Registrar
//                             //llamo al servicio para registrar al usuario
//                             try{
//                                 $con = Propel::getConnection();
//                                 $con->beginTransaction();
//                                //primero grabo los datos localmente
//
//                                 //si la respuesta es correcta procedo iniciar el servicio
//                                 //de practilpublic function execute_registrar_usuario_aceptor($nombre,
//                                 if($token_security!="null"){
//                                        $necesita_verificacion = 2;
//                                 }else{
//                                        $necesita_verificacion = 1;
//                                 }
//
//                                 $obj = json_decode($this->execute_registrar_usuario_aceptor($txt_nombre,$txt_ape_paterno,$txt_ape_materno,$txt_correo,$txt_password,$necesita_verificacion));
//
//                                 if($obj->{'code'}==10001){
//
//                                          $txt_nombre = str_replace(' ', '+', $txt_nombre);
//                                          $txt_ape_paterno = str_replace(' ', '+', $txt_ape_paterno);
//
//
//                                          $servicio_practil_registrar = sfConfig::get('app_url_practil').'xml_servicio_usuario/registrar?';
//                                          $token= "esferadigital";
//                                          $token = md5($token);
//                                          $servicio_practil_registrar = $servicio_practil_registrar.'nombre='.$txt_nombre.'&apellido='.$txt_ape_paterno."&password=".md5($txt_password).'&email=';
//                                          $servicio_practil_registrar = $servicio_practil_registrar.$txt_correo.'&plataforma=1&token='.$token.'&tipo_registro='.$necesita_verificacion;
//
//
//                                         //segundo grabo los datos en servidor y espero
//                                         //una respuesta si no puedo grabar en mi servicio
//                                         //hago rollback
//
//                                          $respuesta_registrar = file_get_contents($servicio_practil_registrar);
//                                          $result_registrar = $lib->xml2array($respuesta_registrar);
//                                          $items_registro=$result_registrar['practil'];
//
//                                          foreach ($items_registro as $item){
//                                               if(isset($item['code'])){
//                                                   if($item['code']==10004){
//                                                        $pk_practil = $item['pk'];
//                                                        //Verfica si correo es unico
//                                                        $criteria = new Criteria();
//                                                        $criteria->add(TbUsuarioPeer::CORREO,'%'.$txt_correo.'%',Criteria::LIKE);
//                                                        $user_correo = TbUsuarioPeer::doSelectOne($criteria);
//                                                        $user_correo->setIdPractil($pk_practil);
//                                                        $user_correo->save();
//
//                                                         //el token para que pueda activar su cuenta
//                                                            /*Tipo de confirmacion:
//                                                             1=nesecita confirmacion
//                                                             2=sin confirmacion
//                                                             */
//                                                          /*Le envio un correo con su contrase�a*/
//                                                          if($necesita_verificacion==1){
//                                                           $token_email = $item['token'];
//                                                           $message = $this->getMailer()->compose();
//                                                           $message->setSubject('ACEPTOR - Confirmacion');
//                                                           $message->setTo($txt_correo);
//                                                           $message->setFrom(array('no-reply@aceptor.com' => 'Practil-Aceptor' ));
//                                                           $html = $this->getPartial('registrar_usuario/mensaje', array(
//                                                                'token'=>$token_email,
//                                                                'email'=>$txt_correo,
//                                                               ));
//                                                           $message->setBody($html, 'text/html');
//                                                           $this->getMailer()->send($message);
//                                                          }
//
//                                                        //finalizo exitozamente
//                                                         $con->commit();
//                                                         if($necesita_verificacion==1){
//                                                           $this->redirect('home/sign_up');
//                                                         }else{
//                                                           $this->redirect('home_login/index');
//                                                         }
//
//
//                                                   }else{//-----ACA EVALUAR EL CODIGO DE RESPUESTA PARA SABER
//                                                        //POR QUE NO SE REALIZO LA TRANSACCION
//                                                       $con->rollBack();
//                                                       //$this->redirect('@homepage');
//                                                       print_r('POR QUE NO SE REALIZO LA TRANSACCION');
//
//                                                   }
//                                               }else{
//                                                  //error en el xml
//                                                  $con->rollBack();
//                                                  print_r('error en el xml');
//                                                  //$this->redirect('@homepage');
//                                               }
//                                          }
//
//                                 }else{
//                                    //hubo algun error al registrar el usuario
//                                    $con->rollBack();
//                                     print_r('hubo algun error al registrar el usuario');
//                                    //$this->redirect('@homepage');
//                                 }
//
//                             }catch(Exception $e){
//                                 $con->rollBack();
//                                 print_r('se cayo en forma general');
//                                 //$this->redirect('@homepage');
//                             }
//                       }
//               }else{
//                   //error en el token no llamo a ningun servicio
//                   $this->redirect('@homepage');
//               }
//
//            }
//       }
//
//
//   }else{
//         $this->redirect('@homepage');
//   }
  
  }


public function send_mail_aceptor($token_email,$txt_correo){
       try{
               $message = $this->getMailer()->compose();
               $message->setSubject('ACEPTOR - Confirmación');
               $message->setTo($txt_correo);
               $message->setFrom(array('no-reply@aceptor.com' => 'Practil-Aceptor' ));
               $html = $this->getPartial('registrar_usuario/mensaje', array(
                    'domain' => sfConfig::get('app_url_aceptor'),
                    'token'=>$token_email,
                    'email'=>$txt_correo,
                   ));
               $message->setBody($html, 'text/html');
               $this->getMailer()->send($message);
               return true;
       }catch (Exception $e){
           return false;
       }
       
}


public function executeExito(sfWebRequest $request)
{
    
}




public function execute_registrar_usuario_aceptor($nombre,
                                                  $apellido_paterno,
                                                  $apellido_materno,
                                                  $correo,
                                                  $password,$verificacion){
        try {
             

              {
                $obj_usuario = new TbUsuario();
                $obj_usuario->setNombre($nombre);
                $obj_usuario->setApePaterno($apellido_paterno);
                $obj_usuario->setApeMaterno($apellido_materno);
                $obj_usuario->setCorreo($correo);
                $obj_usuario->setPassword($password);
                $obj_usuario->setFechaRegistro(date('Y-m-j'));
                $obj_usuario->setHoraRegistro(date('g:i:s'));
                $obj_usuario->setFechaHoraRegistro(date('Y-m-d H:i:s'));
                 /*23 junio 2011
                Se asigna el estado 1 (que todavia no se que significa)  */
                $obj_usuario->setEstado('1');
                $obj_usuario->save();
                //Obtiene el Id del nuevo usuario
                $usuario_id =  $obj_usuario->getId();
              }


              {   ////Registra 1 Etiqueta por default al nuevo usuario
                    
                        $one_detalle_etiqueta_user = new TbDetalleUsuarioCategoria();
                        $one_detalle_etiqueta_user->setUsuarioId($usuario_id);
                        $one_detalle_etiqueta_user->setNombreCategoria('todos');
                        $one_detalle_etiqueta_user->save();
               
              }
           
              {
                 /* Asigna los acuerdos pendientes a los usuarios */
                /*23 junio 2011
                    cuando un usuario es registrado se busca en la tabla
                       - TbDetalleAcuerdoContactoPeer
                       - TbDetalleActaContactoPeer
                    si hay algun acuerdo o algun Acta con su correo y
                    le asigno el id del usuario creado a esa tabla
                 */
                $tiene_actas_acuerdo = 1;
                
                $criteria = new Criteria();
                $criteria->add(TbDetalleAcuerdoContactoPeer::CORREO,$correo);
                $criteria->add(TbAcuerdoPeer::ESTADO,'1');
                $criteria->addJoin(TbDetalleAcuerdoContactoPeer::ACUERDO_ID,  TbAcuerdoPeer::ID);
                $lst_acuerdo_contacto = TbDetalleAcuerdoContactoPeer::doSelect($criteria);
               
                foreach ($lst_acuerdo_contacto as $row){
                    
                        $tiene_actas_acuerdo = 2;
                        $upd_detalle_acuerdo_contact = TbDetalleAcuerdoContactoPeer::retrieveByPK($row->getId());
                        $upd_detalle_acuerdo_contact->setUsuarioId($usuario_id);
                        $upd_detalle_acuerdo_contact->setNombre($nombre.' '.$apellido_paterno);
                        $upd_detalle_acuerdo_contact->save();
                     
                        $detalle_acuerdo_etiqueta = new TbDetalleAcuerdoCategoria();
                        $detalle_acuerdo_etiqueta->setAcuerdoId($upd_detalle_acuerdo_contact->getAcuerdoId());
                        $detalle_acuerdo_etiqueta->setCategoriaId($one_detalle_etiqueta_user->getId());
                        $detalle_acuerdo_etiqueta->save();
                        
                }
                
                 /* Asigna las actas pendientes a los usuarios recien registrados  */

                $criteria = new Criteria();
                $criteria->add(TbDetalleActaContactoPeer::CORREO,$correo);
                $criteria->add(TbActaPeer::ESTADO,'1');
                $criteria->addJoin(TbDetalleActaContactoPeer::ACTA_ID,  TbActaPeer::ID);
                $lst_acta_contacto = TbDetalleActaContactoPeer::doSelect($criteria);

                foreach ($lst_acta_contacto as $row2) {
                        $tiene_actas_acuerdo = 2;
                        $upd_detalle_acta_contact = TbDetalleActaContactoPeer::retrieveByPK($row2->getId());
                        $upd_detalle_acta_contact->setUsuarioId($usuario_id);
                        $upd_detalle_acta_contact->save();

                        $detalle_acta_etiqueta = new TbDetalleActaEtiqueta();
                        $detalle_acta_etiqueta->setActaId($upd_detalle_acta_contact->getActaId());
                        $detalle_acta_etiqueta->setCategoriaId($one_detalle_etiqueta_user->getId());
                        $detalle_acta_etiqueta->save();

                    }
              }
              {
                /* Inicializa Variables con la sesion q se crea mediante el ingreso por correo */
                

                /* Crea variables de sesion del usuario Registrado */
                  //siempre y cuando el usuario no necesite verificacion
                  if($verificacion==2){
                        $this->getUser()->setAttribute('ses_user_id',$obj_usuario->getId());
                        $this->getUser()->setAttribute('ses_user_nombre',$obj_usuario->getNombre());
                        $this->getUser()->setAttribute('ses_user_ape_pat',$obj_usuario->getApePaterno());
                        $this->getUser()->setAttribute('ses_user_ape_mat',$obj_usuario->getApeMaterno());
                        $this->getUser()->setAttribute('ses_user_correo',$obj_usuario->getCorreo());
                  }
               
             }
             {
                          
              
             }
             $respt =  json_encode(array(
    "code"  =>  10001,
                "rpt" =>  $tiene_actas_acuerdo
             ));
             return $respt;
        }catch(Exception $e){
          $respt =  json_encode(array(
    "code"  =>  20001,
                "rpt" =>  1
             ));
          return $respt;
        }
         $respt =  json_encode(array(
    "code"  =>  20001,
                "rpt" =>  1
             ));
        return $respt;
}

}
